void print(const char* s, int l);
void exit(int code);

void program()
{
    print("Hello World!\n", 13);
    exit(0);
}

void print(const char* s, int l)
{
    asm volatile (
        "movl $4, %%eax\n"          // 设置系统调用号4（sys_write）
        "movl $1, %%ebx\n"          // 设置输出目标为标准输出（1）
        "movl %0, %%ecx\n"          // 将字符串地址加载到ecx寄存器
        "movl %1, %%edx\n"          // 将字符串长度加载到edx寄存器
        "int $0x80      \n"         // 执行系统调用
        :                           // 无输出参数
        : "r"(s), "r"(l)            // 输入参数
        : "eax", "ebx", "ecx", "edx"  // 修改的寄存器
    );
}

void exit(int code)
{
    asm volatile (
        "movl $1, %%eax\n"          // 设置系统调用号1（sys_exit）
        "movl %0, %%ebx\n"          // 将退出代码加载到ebx寄存器
        "int $0x80     \n"          // 执行系统调用
        :
        : "r"(code)                 // 输入参数
        : "eax", "ebx"              // 修改的寄存器
    );
}
